const BASE_URL = 'http://121.4.97.171:28080/api/ypwl-pj-web/pujiewang'

class Request {
  constructor() {
    this.token = ''
  }

  // 设置 token
  setToken(token) {
    this.token = token
  }

  // 基础请求方法
  request(options) {
    return new Promise((resolve, reject) => {
      const { url, data, method = 'GET', showLoading = true } = options

      // 显示加载提示
      if (showLoading) {
        wx.showLoading({
          title: '加载中...',
          mask: true
        })
      }

      wx.request({
        url: BASE_URL + url,
        data: data || {},
        method: method,
        header: {
          'Content-Type': 'application/json',
          'Authorization': this.token ? `Bearer ${this.token}` : ''
        },
        success: (res) => {
          if (showLoading) {
            wx.hideLoading()
          }

          // HTTP 状态码为 200
          if (res.statusCode === 200) {
            // 这里可以根据后端返回的数据结构进行调整
            if (res.data.code == 0 || res.data.success) {
              resolve(res.data)
            } else {
              this._showError(res.data.message || '请求失败')
              reject(res.data)
            }
          } else {
            this._handleHttpError(res.statusCode)
            reject(res)
          }
        },
        fail: (error) => {
          if (showLoading) {
            wx.hideLoading()
          }
          this._showError('网络连接失败')
          reject(error)
        }
      })
    })
  }

  // 处理 HTTP 错误
  _handleHttpError(statusCode) {
    const errorMap = {
      400: '请求参数错误',
      401: '未授权，请重新登录',
      403: '拒绝访问',
      404: '请求地址不存在',
      500: '服务器内部错误',
      502: '网关错误',
      503: '服务不可用'
    }
    const message = errorMap[statusCode] || `请求失败，状态码：${statusCode}`
    this._showError(message)
  }

  // 显示错误信息
  _showError(message) {
    wx.showToast({
      title: message,
      icon: 'none',
      duration: 2000
    })
  }

  // GET 请求
  get(url, data = {}, options = {}) {
    return this.request({
      url,
      data,
      method: 'GET',
      ...options
    })
  }

  // POST 请求
  post(url, data = {}, options = {}) {
    return this.request({
      url,
      data,
      method: 'POST',
      ...options
    })
  }
}

// 创建实例并导出
const wxRequest = new Request()
export default wxRequest